home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / tcp_ip / tnos / tnos100s / help.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-30  |  2.9 KB  |  145 lines

  1. /* Help engine:
  2.  *
  3.  * Copyright 1993 Brian A. Lantz, KO4KS
  4.  */
  5. #include <stdio.h>
  6. #include "config.h"
  7. #include "global.h"
  8. #include "cmdparse.h"
  9. #include "help.h"
  10. #include "files.h"
  11.  
  12. extern struct cmds DFAR Mbcmds[];
  13. extern struct cmds DFAR Cmds[];
  14.  
  15. static int
  16. ours (buf, search)
  17. char *buf, *search;
  18. {
  19. char buf2[82], search2[82];
  20.  
  21.     if (strchr (buf, '*'))
  22.         return ((search == NULLCHAR) ? 1 : 0);
  23.     if (search == NULLCHAR)
  24.         return 1;
  25.     strcpy (buf2, buf);
  26.     strcpy (&search2[1], search);
  27.     search2[0] = ':';
  28.     strlwr (buf2);
  29.     strlwr (search2);
  30.     return ((int)strstr (buf2, search2));
  31. }
  32.  
  33.  
  34. void
  35. dohelper(title,cmdp,stopstr,filename,search)
  36. char *title, *stopstr, *search, *filename;
  37. register struct cmds *cmdp;
  38. {
  39. int i;
  40. char buf[82];
  41. struct cmds *saved;
  42. int width = 0, count;
  43. FILE *fp;
  44.  
  45.     saved = cmdp;
  46.     for ( ; cmdp->name != NULL; cmdp++)
  47.         width = (strlen(cmdp->name) > width) ? strlen(cmdp->name) : width;
  48.     width += 1;
  49.     count = (79 / width);
  50.     cmdp = saved;
  51.     if (filename == NULLCHAR || search == NULLCHAR)
  52.         tputs(title);
  53.     if (filename == NULLCHAR)    {    /* '?' commands    */
  54.         tputs (" ");
  55.         memset(buf,' ',sizeof(buf));
  56.         buf[77] = '\n';
  57.         buf[78] = '\0';
  58.         for(i=0;cmdp->name != NULL;cmdp++,i = ((i+1) % count)){
  59.             if (stopstr && !stricmp (cmdp->name, stopstr))
  60.                 break;
  61.             strncpy(&buf[i * width],cmdp->name,strlen(cmdp->name));
  62.             if(i == (count - 1)){
  63.                 tprintf("%s ", buf);
  64.                 memset(buf,' ',77);
  65.             }
  66.         }
  67.         if(i != 0)
  68.             tprintf(buf);
  69.         else
  70.             tputc ('\b');
  71.         return;
  72.     }
  73.     if ((fp = fopen (filename, READ_TEXT)) != NULLFILE)    {
  74.         if (search != NULLCHAR)
  75.             tputs ("Usage:\n");
  76.         count = 0;
  77.         do    {
  78.             if (fgets (buf, 80, fp))    {
  79.                 if (*buf == '#')
  80.                     continue;    /* skip comments    */
  81.                 if (*buf != ':')    {
  82.                     if (count)    {
  83.                         count--;
  84. /*                        if (search != NULLCHAR)
  85.                             tputs ("  ");
  86.                         tputs (buf);        */
  87.                         tprintf ("  %s", buf);
  88.                     }
  89.                 } else    {    /* start of field or continuation */
  90.                     count = (ours (buf, search)) ? 32000 : 0;
  91.                     if (search == NULLCHAR && count)
  92.                         count = 1;
  93.                     if (buf[1] == ':' && count == 1)
  94.                         count--;
  95.                 }
  96.             }
  97.         } while (!feof (fp));
  98.         fclose (fp);
  99.     }
  100. }
  101.  
  102. int
  103. dohelp(argc, argv, p)
  104. int argc;
  105. char *argv[];
  106. void *p;
  107. {
  108.     dohelper ("Main commands:\n", &Cmds[1], "a:", (argv[0][0] == '?' && argc == 1) ? NULLCHAR : CommandHelp, (argc == 2) ? argv[1] : NULLCHAR);
  109.     return 0;
  110. }
  111.  
  112.  
  113. int
  114. syntax(cmd)
  115. char *cmd;
  116. {
  117.     dohelper (NULLCHAR, &Cmds[1], "a:", CommandHelp, cmd);
  118.     return 0;
  119. }
  120.  
  121.  
  122. int
  123. dombxhelp(argc, argv, p)
  124. int argc;
  125. char *argv[];
  126. void *p;
  127. {
  128. char buf[255];
  129.  
  130.     sprintf (buf, "Mailbox Commands for %s at %s\n\n", Version, Hostname);
  131.     dohelper (buf, &Mbcmds[1], "[", (argv[0][0] == '?' && argc == 1) ? NULLCHAR : MBOXHelp, (argc == 2) ? argv[1] : NULLCHAR);
  132.     return 0;
  133. }
  134.  
  135.  
  136. int
  137. mbxsyntax(cmd)
  138. char *cmd;
  139. {
  140.     dohelper (NULLCHAR, &Mbcmds[1], "[", MBOXHelp, cmd);
  141.     return 0;
  142. }
  143.  
  144.  
  145.